package com.xiangpq.pattern.creationalPatterns.abstractFactoryPattern;

/**
 * @author XPQ
 * @function
 * @since 2024-04-02
 */
public class AbstractFactoryPatternDemo {

    /**
     * 程序的主入口函数。
     * 该函数首先通过FactoryProducer获取一个形状工厂（ShapeFactory），然后通过该工厂创建并绘制不同形状的图形。
     * 接着，该函数获取一个颜色工厂（ColorFactory），并使用该工厂填充不同颜色。
     *
     * @param args 命令行参数（未使用）
     */
    public static void main(String[] args) {
        // 获取形状工厂，并通过该工厂创建和绘制圆形、矩形和正方形
        AbstractFactory shapeFactory = FactoryProducer.getFactory("SHAPE");

        // 创建并绘制圆形
        Shape shape1 = shapeFactory.getShape("CIRCLE");

        shape1.draw();

        // 创建并绘制矩形
        Shape shape2 = shapeFactory.getShape("RECTANGLE");

        shape2.draw();

        // 创建并绘制正方形
        Shape shape3 = shapeFactory.getShape("SQUARE");

        shape3.draw();

        // 获取颜色工厂，并通过该工厂填充红色、绿色和蓝色
        AbstractFactory colorFactory = FactoryProducer.getFactory("COLOR");

        // 填充红色
        Color color1 = colorFactory.getColor("RED");

        color1.fill();

        // 填充绿色
        Color color2 = colorFactory.getColor("GREEN");

        color2.fill();

        // 填充蓝色
        Color color3 = colorFactory.getColor("BLUE");

        color3.fill();
    }


}
